package cn.com.nes.site.entity.bo;

import cn.com.nes.site.entity.UserInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

@Slf4j
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BaseBO {
    /**
     * 操作用户ID
     */
    private Long operateUserId;

    /**
     * 操作用户名称
     */
    private String operateUserName;

    /**
     * 操作用户公司ID
     */
    private String operateUserCompanyId;

    /**
     * 操作用户公司类型
     */
    private String operateUserCompanyType;

    /**
     * 操作人手机号
     */
    private String operateUserPhone;

    /**
     * 操作时间
     */
    private Date operateDate = new Date();

    /**
     * 操作时间戳
     */
    private Long operateTimeStamp = System.currentTimeMillis();

    /**
     * 操作平台
     */
    private String operatePlatform;

    /**
     * 用户信息
     */
    private UserInfo userInfo;

    /**
     * 日志追踪ID
     */
    private String traceId;

    /**
     * 操作用户行政区划代码集合
     */
    private Set<String> operateUserAreaCodeSet = new HashSet<>();

    public <T extends BaseBO, S extends BaseBO> T copyOperateInfo(S s, Class<T> clazz) {
        T target = null;
        try {
            target = clazz.newInstance();
        } catch (Exception e) {
            log.warn("copyOperateInfo", e);
        }
        assert target != null;
        BeanUtils.copyProperties(s, target);
        return target;
    }
}
